package modelo.reglas;

import modelo.reglas.composite.AndSpecification;
import modelo.reglas.composite.NotSpecification;
import modelo.reglas.composite.OrSpecification;

public abstract class CompositeSpecification<T extends Specificable> extends
		ISpecification<T> {

	public ISpecification<T> and(ISpecification<T> other) {
		return new AndSpecification<T>(this, other);
	}

	public ISpecification<T> or(ISpecification<T> other) {
		return new OrSpecification<T>(this, other);
	}

	public ISpecification<T> not() {
		return new NotSpecification<T>(this);
	}
}